package controller;

import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;

import javax.imageio.ImageIO;

import util.Comandos;
import util.FunctionsUtils;
import view.PrincipalFrame;
import view.TestFrame;

public class TestController implements ActionListener {

	private TestFrame vista;

	public TestController(PrincipalFrame principal) {
		this.vista = new TestFrame(principal);
		inicializar();
	}

	public void inicializar() {
		vista.setTitle("TestFrame");
		vista.getContentPane().setPreferredSize(vista.getSize());
		vista.pack();
		vista.setLocationRelativeTo(null);
		vista.setVisible(true);
		vista.setActionListeners(this);
		vista.setModal(true);
	}

	public void actionPerformed(ActionEvent e) {
		String comando = e.getActionCommand();
		switch (Comandos.valueOf(comando)) {

		case CAPTURA:
			try {
				Toolkit tool = Toolkit.getDefaultToolkit();
				Dimension d = tool.getScreenSize();
				Rectangle rect = new Rectangle(d);
				Robot robot = new Robot();
				Thread.sleep(2000);
				File f = new File("screenshot.jpg");
				BufferedImage img = robot.createScreenCapture(rect);
				ImageIO.write(img, "jpeg", f);
				tool.beep();
			} catch (Exception e1) {
				e1.printStackTrace();
			}

			break;

		case CALCULAR_TEST:
			float metros = Float.parseFloat(vista.getMetros());
			float vo2 = (float) FunctionsUtils.redondear(-1 * (504 - metros)
					/ 45, 2);
			float vel = (float) FunctionsUtils.redondear(
					((metros / 720) * (3.6)), 2);

			vista.setvo2MaxLabel(String.valueOf(vo2));
			vista.setvelLabel(String.valueOf(vel));

			float nivel3 = ((3600 * 1000) / (vel * 1000));

			float n1000 = nivel3 * 1000;
			float n900 = nivel3 * 900;
			float n800 = nivel3 * 800;
			float n700 = nivel3 * 700;
			float n600 = nivel3 * 600;
			float n500 = nivel3 * 500;
			float n400 = nivel3 * 400;
			float n300 = nivel3 * 300;
			float n200 = nivel3 * 200;

			String nivel4_1000 = FunctionsUtils.milisegundosToString(n1000
					- (n1000 * (5.0 / 100)));
			String nivel4_900 = FunctionsUtils.milisegundosToString(n900
					- (n900 * (5.0 / 100)));
			String nivel4_800 = FunctionsUtils.milisegundosToString(n800
					- (n800 * (5.0 / 100)));
			String nivel4_700 = FunctionsUtils.milisegundosToString(n700
					- (n700 * (5.0 / 100)));
			String nivel4_600 = FunctionsUtils.milisegundosToString(n600
					- (n600 * (5.0 / 100)));
			String nivel4_500 = FunctionsUtils.milisegundosToString(n500
					- (n500 * (5.0 / 100)));
			String nivel4_400 = FunctionsUtils.milisegundosToString(n400
					- (n400 * (5.0 / 100)));
			String nivel4_300 = FunctionsUtils.milisegundosToString(n300
					- (n300 * (5.0 / 100)));
			String nivel4_200 = FunctionsUtils.milisegundosToString(n200
					- (n200 * (5.0 / 100)));

			vista.setN4(nivel4_200, nivel4_300, nivel4_400, nivel4_500,
					nivel4_600, nivel4_700, nivel4_800, nivel4_900, nivel4_1000);

			String nivel3_1000 = FunctionsUtils.milisegundosToString(n1000);
			String nivel3_900 = FunctionsUtils.milisegundosToString(n900);
			String nivel3_800 = FunctionsUtils.milisegundosToString(n800);
			String nivel3_700 = FunctionsUtils.milisegundosToString(n700);
			String nivel3_600 = FunctionsUtils.milisegundosToString(n600);
			String nivel3_500 = FunctionsUtils.milisegundosToString(n500);
			String nivel3_400 = FunctionsUtils.milisegundosToString(n400);
			String nivel3_300 = FunctionsUtils.milisegundosToString(n300);
			String nivel3_200 = FunctionsUtils.milisegundosToString(n200);

			vista.setN3(nivel3_200, nivel3_300, nivel3_400, nivel3_500,
					nivel3_600, nivel3_700, nivel3_800, nivel3_900, nivel3_1000);

			String nivel2_1000 = FunctionsUtils.milisegundosToString((n1000
					* (13.5 / 100) + n1000));
			String nivel2_900 = FunctionsUtils.milisegundosToString((n900
					* (13.5 / 100) + n900));
			String nivel2_800 = FunctionsUtils.milisegundosToString((n800
					* (13.5 / 100) + n800));
			String nivel2_700 = FunctionsUtils.milisegundosToString((n700
					* (13.5 / 100) + n700));
			String nivel2_600 = FunctionsUtils.milisegundosToString((n600
					* (13.5 / 100) + n600));
			String nivel2_500 = FunctionsUtils.milisegundosToString((n500
					* (13.5 / 100) + n500));
			String nivel2_400 = FunctionsUtils.milisegundosToString((n400
					* (13.5 / 100) + n400));
			String nivel2_300 = FunctionsUtils.milisegundosToString((n300
					* (13.5 / 100) + n300));
			String nivel2_200 = FunctionsUtils.milisegundosToString((n200
					* (13.5 / 100) + n200));

			vista.setN2(nivel2_200, nivel2_300, nivel2_400, nivel2_500,
					nivel2_600, nivel2_700, nivel2_800, nivel2_900, nivel2_1000);

			String nivel1_1000 = FunctionsUtils.milisegundosToString((n1000
					* (23.5 / 100) + n1000));
			String nivel1_900 = FunctionsUtils.milisegundosToString((n900
					* (23.5 / 100) + n900));
			String nivel1_800 = FunctionsUtils.milisegundosToString((n800
					* (23.5 / 100) + n800));
			String nivel1_700 = FunctionsUtils.milisegundosToString((n700
					* (23.5 / 100) + n700));
			String nivel1_600 = FunctionsUtils.milisegundosToString((n600
					* (23.5 / 100) + n600));
			String nivel1_500 = FunctionsUtils.milisegundosToString((n500
					* (23.5 / 100) + n500));
			String nivel1_400 = FunctionsUtils.milisegundosToString((n400
					* (23.5 / 100) + n400));
			String nivel1_300 = FunctionsUtils.milisegundosToString((n300
					* (23.5 / 100) + n300));
			String nivel1_200 = FunctionsUtils.milisegundosToString((n200
					* (23.5 / 100) + n200));

			vista.setN1(nivel1_200, nivel1_300, nivel1_400, nivel1_500,
					nivel1_600, nivel1_700, nivel1_800, nivel1_900, nivel1_1000);

			String base_1000 = FunctionsUtils.milisegundosToString((n1000
					* (28.5 / 100) + n1000));
			String base_900 = FunctionsUtils.milisegundosToString((n900
					* (28.5 / 100) + n900));
			String base_800 = FunctionsUtils.milisegundosToString((n800
					* (28.5 / 100) + n800));
			String base_700 = FunctionsUtils.milisegundosToString((n700
					* (28.5 / 100) + n700));
			String base_600 = FunctionsUtils.milisegundosToString((n600
					* (28.5 / 100) + n600));
			String base_500 = FunctionsUtils.milisegundosToString((n500
					* (28.5 / 100) + n500));
			String base_400 = FunctionsUtils.milisegundosToString((n400
					* (28.5 / 100) + n400));
			String base_300 = FunctionsUtils.milisegundosToString((n300
					* (28.5 / 100) + n300));
			String base_200 = FunctionsUtils.milisegundosToString((n200
					* (28.5 / 100) + n200));

			vista.setBase(base_200, base_300, base_400, base_500, base_600,
					base_700, base_800, base_900, base_1000);

			break;
		}
	}
}
